# 如果想要应用自定义的函数，或者把其他库中的函数应用到 Pandas 对象中，有以下三种方法：
# 1) 操作整个 DataFrame 的函数：pipe()
# 2) 操作行或者列的函数：apply()
# 3) 操作单一元素的函数：applymap()

import pandas as pd
import numpy as np


# 操作整个数据表  pipe
def adder(ele1, ele2):
    return ele1 + ele2


df = pd.DataFrame(np.random.randn(4, 3), columns=['c1', 'c2', 'c3'])
# 传入自定义函数以及要相加的数值3
print(df)  # 相加前
#          c1        c2        c3
# 0  1.722704  1.282488 -0.789052
# 1 -0.003984  1.430065 -0.463029
# 2  0.737326 -1.456462 -2.197075
# 3  2.004405  0.946127 -1.523494
print(df.pipe(adder, 3))  # 表中元素依次加3
#          c1        c2        c3
# 0  4.722704  4.282488  2.210948
# 1  2.996016  4.430065  2.536971
# 2  3.737326  1.543538  0.802925
# 3  5.004405  3.946127  1.476506


# 操作行或列  apply
df = pd.DataFrame(np.random.randn(5, 3), columns=['col1', 'col2', 'col3'])
# 默认按列操作，计算每一列均值
print(df.apply(np.mean))
# col1   -0.182093
# col2   -0.122097
# col3   -0.738278
# dtype: float64

# 操作单一元素 applymap   和 Series 系列结构的 map() 类似

df = pd.DataFrame(np.random.randn(5, 3), columns=['col1', 'col2', 'col3'])
# 自定义函数lambda函数
print(df['col1'].map(lambda x: x * 100))
print(df.applymap(lambda x: x * 10))
print(df.apply(np.mean))

